package homework05_2024_09_20;
/* @Author:zzw
   @Version:1.0
   @DateTime:2024/9/23 9:10
   */

/*
0:定义一个整数数组，实现如下功能：
  把所有的偶数放右边，奇数放左边；比如这个数组是1，2，3，4，则最终结果是 1，3，2，4
  （不一定是这个顺序，很显然，1，3，4，2和 3，1，4，2也是合理的）
 */

@SuppressWarnings("all")
public class Topic00 {
    public static void main(String[] args) {
        int[] arr = {1, 5, 6, 7, 2, 3, 11, 9, 8, 10, 51, 4, 5, 6, 8, 9, 4, 5, 1, 2, 3, 2, 6, 5, 7};
        int leftmostEvenNumIndex = -1; // 从左向右第一个偶数的下标
        // 遍历判断数组每一个数的奇偶
        for (int i = 0; i < arr.length; i++) {
            // arr[i]是奇数就会执行该if语句
            if (arr[i] % 2 == 1) {
                // arr[i]左边有偶数就会执行该if语句
                if (leftmostEvenNumIndex != -1) {
                    change(arr, i, leftmostEvenNumIndex);
                    // 校准第一个偶数的下标
                    for (int j = leftmostEvenNumIndex + 1; j < arr.length; j++) {
                        if (arr[j] % 2 == 0) {
                            leftmostEvenNumIndex = j;
                            break;
                        }
                    }
                }
            } else {
                if (i == 0 || arr[i - 1] % 2 == 1) // 校准第一个偶数的下标
                    leftmostEvenNumIndex = i;
            }
        }
        
        // 遍历输出修改后的数组
        for (int i : arr) {
            System.out.print(i + " ");
        }
    }
    
    // 交换数组的两个数
    public static void change(int[] arr, int a, int b) {
        int temp = arr[a];
        arr[a] = arr[b];
        arr[b] = temp;
    }
}
